#pragma once

#include "Logger.hpp"

namespace log
{
    // 1:提供获取指定日志器的全局接口(避免用户使用单列模式自己调用)
    Logger::ptr GetLogger(const std::string &name)
    {
        return LoggerManager::GetInstance().GetLogger(name);
    }
    Logger::ptr GetRootLogger()
    {
        return LoggerManager::GetInstance().GetRootLogger();
    }

#define DEBUG(fmt, ...) Debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define INFO(fmt, ...) Info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define WARN(fmt, ...) Warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define ERROR(fmt, ...) Error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define FATAL(fmt, ...) Fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

// 3:提供宏函数,直接通过默认日志器进行日志的标准输出打印
#define LOG_D(fmt, ...) log::GetRootLogger()->DEBUG(fmt, ##__VA_ARGS__)
#define LOG_I(fmt, ...) log::GetRootLogger()->INFO(fmt, ##__VA_ARGS__)
#define LOG_W(fmt, ...) log::GetRootLogger()->WARN(fmt, ##__VA_ARGS__)
#define LOG_E(fmt, ...) log::GetRootLogger()->ERROR(fmt, ##__VA_ARGS__)
#define LOG_F(fmt, ...) log::GetRootLogger()->FATAL(fmt, ##__VA_ARGS__)
}
